home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Night Owl 19
/
Night Owl (The Best of Shareware)(NOPV 19)(1996).ISO
/
007a
/
strakd10.zip
/
STRAK.MEX
< prev
Wrap
Text File
|
1995-11-18
|
4KB
|
197 lines
/////////////////////////////////////////////////////////////////////////////
//
// StarTraker V1.00 [Door Count Module] (!)1995 Larry Monte\StarLab Systems
//
// MEX: Copyright 1990, 1995 by Lanius Corporation. All rights reserved.
//
//
#define DO_DOORNAME 1
#define DO_ENTRY 21
#define DO_LAST 26
#define DO_LASTUSR 44
#define DO_RESET 62
#define LEN_DOORNAME 20
#define LEN_ENTRY 5
#define LEN_LAST 18
#define LEN_LASTUSR 18
#define LEN_RESET 9
#define LEN_RECORD 77
#define CONFIG "C:\\MAX\\STRAK\\STRAK.CTL"
#define DAT_FILE "C:\\MAX\\STRAK\\STRAK.DAT"
#include <max.mh>
string: doorname,dstr,data,reset,lastuser,last,fname,entry;
long: atofs,entery,fileoffset;
struct _doorconfig
{
string: tagname;
string: doorname;
};
array [1..50] of struct _doorconfig: dc;
int get_configdata(ref int: i)
{
int: dd,pos;
dd:=open(CONFIG, IOPEN_READ);
if (dd=-1)
print(COL_LRED, "Error!");
i := 1;
while (readln(dd,data)>0)
{
if (data[1]<>';')
{
dc[i].tagname := strtok(data, ",",pos);
dc[i].doorname := substr(data,pos+1,strlen(data));
i:=i+1;
}
pos:=0;
}
close(dd);
return i;
}
string getdoorname(string: argv, ref string: doordata, int: numdoors)
{
int: i;
for (i:=numdoors;i>0;i:=i-1)
{
if (argv = dc[i].tagname)
{
doordata := dc[i].doorname;
log("PEntered "+doordata+"!");
return doordata;
}
}
print(COL_RED, "Error Has Occured! Please inform Sysop!");
menu_cmd(106,"");
}
void packstr(ref string: s, string: u, int: ofs, int: len)
{
int: c;
u := strpad(u, len, ' ');
for (c := 1; c <= len; c:=c+1)
{
s[ofs] := u[c];
ofs := ofs+1;
}
}
string unpackstr(ref string: s, int: ofs, int: len)
{
return strtrim(substr(s, ofs, len), " ");
}
void unpackdata(ref string: s)
{
doorname := unpackstr(s, DO_DOORNAME, LEN_DOORNAME);
entry := unpackstr(s, DO_ENTRY, LEN_ENTRY);
dstr := unpackstr(s, DO_LAST, LEN_LAST);
lastuser := unpackstr(s, DO_LASTUSR, LEN_LASTUSR);
reset := unpackstr(s, DO_RESET, LEN_RESET);
entery := strtol(entry);
}
int readdata(string: doordata)
{
int: fd;
fileoffset := -1;
fd := open(DAT_FILE,IOPEN_READ);
if (fd<>-1)
{
int: done;
atofs := 0;
done := False;
while (done = False AND (read(fd,data,LEN_RECORD)=LEN_RECORD))
{
doorname:=unpackstr(data,DO_DOORNAME,LEN_DOORNAME);
if (doorname=doordata)
{
fileoffset := atofs;
unpackdata(data);
done := True;
}
atofs := atofs+LEN_RECORD;
}
close(fd);
}
return True;
}
void packdata(ref string: s, string: doordata)
{
int: pos;
struct _stamp: now;
timestamp(now);
dstr := stamp_string(now);
s := strpad("", LEN_RECORD, ' ');
packstr(s, doordata, DO_DOORNAME, LEN_DOORNAME);
entery := entery +1;
if (entery = 1)
reset := strtok(dstr, " \t",pos);
entry := strpadleft(ltostr(entery),5,' ');
packstr(s, entry, DO_ENTRY, LEN_ENTRY);
packstr(s, dstr, DO_LAST, LEN_LAST);
packstr(s, usr.name, DO_LASTUSR, LEN_LASTUSR);
packstr(s, reset, DO_RESET, LEN_RESET);
s[LEN_RECORD-1]:='\r';
s[LEN_RECORD-0]:='\n';
}
int writedata(ref string: doordata)
{
int: fd;
packdata(data, doordata);
fd := open(DAT_FILE,IOPEN_RW);
if (fd = -1)
{
fd := open(DAT_FILE,IOPEN_RW|IOPEN_CREATE);
if (fd = -1)
menu_cmd(106,"");
return False;
}
if (fileoffset = -1)
fileoffset := seek(fd,0,SEEK_END);
seek(fd,fileoffset,SEEK_SET);
write(fd,data,LEN_RECORD);
close(fd);
return True;
}
int main(string: argv)
{
string: doordata;
int: fd, numdoors;
get_configdata(numdoors);
getdoorname(argv, doordata, numdoors);
readdata(doordata);
writedata(doordata);
return 0;
}